/*
 * Copyright (C) 2004 costa
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place - Suite 330, Boston, MA 02111-1307, USA.
 *  
 */
package sg.atom.utils.repository.space.extensions.aggregation;

import sg.atom.utils.repository.space.Tuple;
import sg.atom.utils.repository.space.interfaces.ITuple;

/**
 * VirtualTuple implements a Proxy (see Design Patterns book) with respect to
 * Tuple.
 * 
 * @author costa
 *  
 */

public abstract class VirtualTuple extends Tuple {

	protected ITuple virtualTemplate;

	public VirtualTuple(ITuple virtualTemplate) {
		this.virtualTemplate = virtualTemplate;
	}

	public abstract ITuple virtualize(ITuple tuple);

	public boolean matches(ITuple tuple) {
		if (super.matches(tuple)) {
			tuple = virtualize(tuple);
			return virtualTemplate.matches(tuple);
		}
				
		return false;
	}
}
